#ifndef TABLAHASH_H
#define TABLAHASH_H

#include "Tabla.h"
#include "Puntero.h"
#include "Constantes.h"

//#define tam_max 101
//#define lambda 1.0

template <class Dominio, class Rango>
class TablaHash : public Tabla<Dominio, Rango>{
protected:
	struct nodoHash{
		Dominio dom;
		Rango ran;
		Puntero<nodoHash> sig;	
		bool operator==(const nodoHash &nodo){
			return this == &nodo;
		}
	};
	Puntero<nodoHash> *arreglo;
	int tamMax,tamActual;
    float fc;// factor de carga
    int(*H)(const Dominio &,int);

public:
	    TablaHash (int(* funH)(const Dominio &, int ) ,int tam=TAM_MAX, float c=LAMBDA);
	    virtual ~TablaHash();
	    bool Insertar ( const Dominio & d, const Rango & r );
	    bool EsVacia ();
        bool EstaDefinida ( const Dominio & d );
	    bool Recuperar ( const Dominio & d, Rango & r );
	    int CantElementos ();
		Rango devolverRango(const Dominio &d);
		Rango ElementoEn(const int pos);
};
#include "TablaHash.cpp"
#endif